﻿using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Exceptions;
using CTS.Com.Domain.Helper;
using CTS.Data.MACodes.Domain.Utils;
using CTS.W._150101.Models.Domain.Common.Constants;
using CTS.W._150101.Models.Domain.Common.Utils;
using CTS.W._150101.Models.Domain.Model.Admin.Master.Items.Entry;

namespace CTS.W._150101.Models.Domain.Logic.Admin.Master.Items.Entry
{
    public class GetCategoryDivLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý get.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public GetCategoryDivDataModel Execute(GetCategoryDivDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(GetCategoryDivDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var masterDataCom = new MasterDataCom();
            // Trường hợp status là edit
            if (DataCheckHelper.IsNull(inputObject.CategoryCd)) {
                throw new SysIgnoreException();
            }
            // Kiểm tra dữ liệu tồn tại
            var isExist = masterDataCom.IsExistCategory(Logics.LOCALE_DEFAULT, inputObject.CategoryCd, false);
            if (!isExist) {
                throw new SysIgnoreException();
            }
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private GetCategoryDivDataModel GetInfo(GetCategoryDivDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new GetCategoryDivDataModel();
            var masterDataCom = new MasterDataCom();
            var codeCom = new CodeCom();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy thông tin dữ liệu
            var dataInfo = masterDataCom.GetCategoryInfo(Logics.LOCALE_DEFAULT, inputObject.CategoryCd, false);
            // Lấy giá trị tên
            var categoryDivName = codeCom.GetName(Logics.LOCALE_DEFAULT, W150101Logics.GRPCD_CATEGORY_DIV, dataInfo.CategoryDiv, true);
            // Gán giá trị trả về
            getResult.CategoryDiv = dataInfo.CategoryDiv;
            getResult.CategoryDivName = categoryDivName;
            // Kết quả trả về
            return getResult;
        }
        #endregion
    }
}
